//
//  ZYStatusViewModel.swift
//  weiboZY
//
//  Created by 赵勇 on 16/5/15.
//  Copyright © 2016年 赵勇. All rights reserved.
//

import UIKit
// cell对应的ViewModel
class ZYStatusViewModel: NSObject {

    var status: ZYStatus?
    //  转发微博内容
    var retWeetContent: String?
    //  转发数内容
    var retweetCountContent: String?
    //  评论数
    var commentCountContent: String?
    //  赞数
    var unlikeCountContent: String?
    //  来源
    var sourceContent: String?
    //  会员等级照片
    var mbrankImage: UIImage?
    //  认证等级照片
    var verifiedTypeImage: UIImage?
    
    //  原创微博富文本
    var origianlAttributedString:NSAttributedString?
    //  转发微博富文本
    var retweetAttributedString:NSAttributedString?
    
    
    //  时间,只读属性
    var timeContent: String? {
        get{
            guard let createdAt = status?.created_at else {
                return nil
            }
            return NSDate.sinaDate(createdAt).sinaDateString
            
//            Mon May 16 20:20:46 +0800 2016
      
//            let dateFormatter = NSDateFormatter()
//            // 指定本地信息
//            dateFormatter.locale = NSLocale(localeIdentifier: "en_US")
//            // 格式化时间
//            dateFormatter.dateFormat = "EEE MMM dd HH:mm:ss z yyyy"
//            
//            let createdAtDate = dateFormatter.dateFromString(createdAt)!
//
            
            /*
            //        判断是否是今年
            //            判断是否是今天
            //                判断是否是1分钟以内
            //                    刚刚
            //                判断是否是1小时之前
            //                    xx分钟前
            //                其它
            //                    xx小时前
            //            判断是否是昨天
            //                昨天 09:02
            //            其它
            //                05-06 10:02
            //        不是今年
            //            2015-10-10 10:10
            //        
            //        */

//            if isThisYear(createdAtDate) {
//                
//                let calendar = NSCalendar.currentCalendar()
//                // 判断是不是今天
//                if calendar.isDateInToday(createdAtDate) {
//                    
//                    // 获取发布微博时间与当前的时间差
//                    let timeInterVal = abs(createdAtDate.timeIntervalSinceNow)
//                    
//                    if timeInterVal < 60 {
//                        
//                        return "刚刚"
//                    } else if timeInterVal < 3600 {
//                        let result = Int(timeInterVal) / 60
//                        return "\(result)分钟前"
//                    } else {
//                        let result = Int(timeInterVal) / 3600
//                        return "\(result)小时前"
//                    }
//                    
//                } else if calendar.isDateInYesterday(createdAtDate) {
//                    // 昨天
//                    dateFormatter.dateFormat = "昨天 HH:MM"
//                } else {
//                    
//                    dateFormatter.dateFormat = "MM-dd HH:MM"
//                }
//                
//                
//            } else {
//                // 不是今年
//                dateFormatter.dateFormat = "yyyy-MM-dd HH:MM"
//            }
//            
//            
//            return dateFormatter.stringFromDate(createdAtDate)
        }
    }
    
    
    init(status:ZYStatus) {
        super.init()
        self.status = status
        // 处理来源数据
        handleSourceContent(status)
        // 处理转发数据
      retweetCountContent = handleCountContent(status.reposts_count, defaultTitle: "转发")
        // 处理评论数据
       commentCountContent = handleCountContent(status.comments_count, defaultTitle: "评论")
        // 处理赞数数据
       unlikeCountContent = handleCountContent(status.attitudes_count, defaultTitle: "赞")
        // 处理转发内容
       handleRetWeetContent(status)
        // 处理会员等级图片
       handleMBrankImage(status.user?.mbrank ?? 0)
        // 处理认证等级照片
       handleVerifiedTypeImage(status.user?.verified_type ?? 0)
        // 处理微博内容的表情只符串
       origianlAttributedString =  handleEmoticonContentWithStatus(status.text!)
        
    }
    
    // 处理微博内容的表情只符串 转表情富文本
    private func handleEmoticonContentWithStatus(status: String) -> NSAttributedString {
        
        // 将微博内容装换程富文本
        let result = NSMutableAttributedString (string: status)
        
        // 根据微博内容匹配表情字符串
        // 使用正则表达式
        var matchResultArray = [ZYMatchResult]()
        
        (status as NSString).enumerateStringsMatchedByRegex("\\[[a-zA-Z0-9\\u4e00-\\u9fa5]+\\]") { (capture, captureString, captureRange, _) -> Void in
            
//            print(captureString.memory)
            
   
            if let emoticonStr = captureString.memory as? String {
                
                if let emoticon = ZYEmoticonTools.sharedEmoticonTools.emoticonWithEmoticonStr(emoticonStr) {
                    
                    let matchResult = ZYMatchResult(string: emoticonStr, range: captureRange.memory)
                    matchResultArray.append(matchResult)
                    
//                    print(emoticon.path)
                    
//                    // 创建表情富文本
//                    let attr = NSAttributedString.attributedWithEmoticon(emoticon, font:UIFont.systemFontOfSize(HomeFontSize) )
//                    // 替换表情富文本
//                    result.replaceCharactersInRange(captureRange.memory, withAttributedString: attr)
                    
                }
                

                
            }

        }
        
        // 倒序遍历
        for value in matchResultArray.reverse() {
            if let emoticon = ZYEmoticonTools.sharedEmoticonTools.emoticonWithEmoticonStr(value.string){
                
                // 创建表情富文本
                let attr = NSAttributedString.attributedWithEmoticon(emoticon, font:UIFont.systemFontOfSize(HomeFontSize) )
                // 替换表情富文本
                result.replaceCharactersInRange(value.range, withAttributedString: attr)
                
            }
            
        }

        return result
    }
    
    
    
    
    // 处理转发，评论，赞的数据
    private func handleCountContent(count:Int, defaultTitle:String) ->String {
        if count > 0 {
            if count >= 10000 {
                let result = CGFloat(count / 1000 / 10)
                let resultStr = "\(result)万"
                if resultStr.containsString(".0") {
                    return resultStr.stringByReplacingOccurrencesOfString(".0", withString: "")
                }
                return resultStr
            } else {
                
                return "\(count)"
            }
        } else {
            return defaultTitle
        }
        
    }
    //  转发微博内容拼接字符串
    private func handleRetWeetContent(status: ZYStatus) {
        
        guard let retweet = status.retweeted_status?.text else {
            return
        }
        //  代码执行到retweet(转发微博)一定存在
        
        guard let name = status.retweeted_status?.user?.screen_name else {
            return
        }
        
        //  拼接转发微博内容
        
        retWeetContent = "@\(name): \(retweet)"
        //  设置转发微博富文本
        retweetAttributedString = handleEmoticonContentWithStatus(retWeetContent!)
   
    }
    
    // 处理来源数据
    private func handleSourceContent(status:ZYStatus) {
        
        guard let source = status.source else {
            return
        }
        
        if source.containsString("\">") {
            let startIndex = source.rangeOfString("\">")?.endIndex
            let endIndex = source.rangeOfString("</")?.startIndex
            
            if let start = startIndex, end = endIndex {
                sourceContent = source.substringWithRange(start..<end)
            }
            
        }
        
        
    }
    
    // 根据发微博的时间判断是否是今年
    private func isThisYear(createdAtDate:NSDate) -> Bool {
        // 获取当前时间
        let currentDate = NSDate()
        let dateFormatter = NSDateFormatter()
        dateFormatter.locale = NSLocale(localeIdentifier: "en_US")
        dateFormatter.dateFormat = "yyyy"
        // 获取当前的年份
        let currentDateYear = dateFormatter.stringFromDate(currentDate)
        // 获取微博数据时间
        let createdAtDateYear = dateFormatter.stringFromDate(createdAtDate)
        
        return currentDateYear == createdAtDateYear
        
    }
    
    // 处理判断会员等级加载图片
    private func handleMBrankImage(count: Int) {
        
        if count > 0 && count < 7 {
            mbrankImage = UIImage(named: "common_icon_membership_level\(count)")
        }
        
    }
    
    // 处理判断认证等级照片
    private func handleVerifiedTypeImage(count: Int) {
        // -1 没认证 0认证用户 2，3，5企业认证 220达人
        switch count {
        case 0 :
            verifiedTypeImage = UIImage(named: "avatar_vip")
        case 2,3,5:
            verifiedTypeImage = UIImage(named: "avatar_enterprise_vip")
        case 220:
            verifiedTypeImage = UIImage(named: "avatar_grassroot")
        default:
            verifiedTypeImage = nil
        }
        
       
    }
    
}
